#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>

typedef struct request
{
    int x;  //左操作数
    int y;  //右操作数
    char op; // 操作符 "+-*/%"
} request_t;

int main()
{
    //反序列化

    //R代表原生字符串,把里面的内容{"datax":10,"datay":20,"operator":42}当成是最原始的内容
    //为的是不转义字符 
    std::string json_string = R"({"datax":10,"datay":20,"operator":42})";
    Json::Reader reader;
    Json::Value root;//万能对象
 
    //parse:第一个参数:你要进行反序列化的字符串    第二个参数:把处理结果k-v结构放到这里
    reader.parse(json_string, root);
    
    request_t req;//结构化的数据 
    //key-value结构
    req.x = root["datax"].asInt(); //asInt函数作用:把这个值当成整数来看
    req.y = root["datay"].asInt();
    req.op = (char)root["operator"].asInt();

    std::cout << req.x << " " << req.op << " " << req.y << std::endl;
    return 0;
}



/*
//序列化:结构化的数据->字符串
int main()
{
    request_t req = {10,20,'*'};
    Json::Value root;//这个对象可以承装任何对象， 

    //1)把结构化的数据承装到对象中
    //json是一种kv(key-value)式的序列化方案
    root["datax"] = req.x;
    root["datay"] = req.y;
    root["operator"] = req.op;

    //2)进行序列化,有两种方式(有两个write类):FastWriter, StyledWriter
    //方式1:
    Json::StyledWriter writer1; 
    std::string json_string1 = writer1.write(root);//write函数返回的是序列化的结果
    //方式2:
    Json::FastWriter writer2;
    std::string json_string2 = writer2.write(root);//write函数返回的是序列化的结果
    

    std::cout <<"方式1序列化的结果  "<<std::endl;
    std::cout<<  json_string1 << std::endl;

    std::cout <<"方式2序列化的结果  "<<std::endl;
    std::cout<<  json_string2 << std::endl;
    return 0;
}

*/